/*
* 假设要给路边栽种景观花：
*   相邻两个花坛不能同时种植花，假设在栽种一段时间之后，有不少鲜花凋零或无法存活，数量和位置随机，
*   我们要做的就是对这些凋零或者已经枯萎的鲜花进行补种。
*
*  空着的地方 [花，不种，枯萎，不种，花，不种，枯萎] 空着的地方
* 带的花的数量 对于 补种数量是否足够
*
* */

function placeFlowers(flowerStatus,flowers){ //花当前的状态数组 带的新花的数量
    //可以栽种的位置，左右两边都是空地，所以可以载在中间的位置
    //即连续三个都是空地的一段区域，在中间那个位置种植 [1,0,1,0,1,0,1]

    let empty = 1 //当前连续空地数量，需要连续三个空地
    //（为什么empty从1开始而不是从0开始，因为最前端和最末端我们默认都有一个空地，如果从0开始，那么花坛最前端的位置就会被空着不种）

    let hasRaiseFlower = 0 //栽种花的数量，默认情况下一棵都没有种下
    for(let i = 0; i < flowerStatus.length; i++){
        let has = flowerStatus[i] //当前位置的栽种情况
        if(!has){ //如果没种
            empty++ //当前连续空地数量++
            if(empty === 3){ //判断当前连续空地数量是否等于3
                flowerStatus[i - 1] = 1 //等号右边的1表示该点要种花，[1,0,1,0,1,0,1]
                //因为是三个连续空地，那么要回退1个到第2个（即flowerStatus[i-1]）地方种花

                hasRaiseFlower++ //种下花之后，栽种花数+1
                empty = 0 //种完这次之后，将当前连续空地数量改成0，便于计数下次种花的位置

            }
            if((i === flowerStatus.length - 1) && empty === 2){
                //当到了花坛的最后一个位置时并且当前连续空地数量为2时，可以种植，原因在解释empty为1时说明了
                flowerStatus[i] = 1
                hasRaiseFlower++ //种下花之后，栽种花数+1
            }
        }else{ //如果种了
            empty = 0 //将当前连续空地数量改成0
        }
    }
    if(hasRaiseFlower <= flowers){ //当栽种花的数量 小于等于 带的花的数量
        return `带的花的数量${flowers},足够种植需要重新栽种的数量${hasRaiseFlower}`
    }else{
        return `带的花的数量${flowers},不够种植需要重新栽种的数量${hasRaiseFlower}`
    }
}

let flowerStatus = [1,0,0,0,1,0,0,0,1,0,0,0,1,0,0]

placeFlowers(flowerStatus,4)